/*
 *      IP_datastruct.h
 *      
 *      Copyright 2009 Daniele Ricci <denn86@gmail.com>, Luca Saccagi <luksak86@gmail.com>
 *      
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *      
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *      
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

#ifndef _IPDATA
#define _IPDATA
/**\struct iIp IP_datastruct.h
 * \brief Struttura di indicizzazione degli indirizzi ip
 * 
 * Questa struttura viene utilizzata per indicizzare gli alert presenti nella lista principale in base agli indirizzi ip in essi contenuti.
 */
typedef struct iIp {
	void *referred;///<Puntatore all'alert che contiene questo ip
	//~ unsigned char match[256];///<Array di tracciamento del matching sul singolo alert
	long int ip;///<Intero costruito con i 3 LSByte dell'ip: 256 * ( ip4 + 256 * (ip3 + 256* ip2))
	unsigned char ip1;///<Primo byte dell'indirizzo ip
	unsigned char ip2;///<Secondo byte dell'indirizzo ip
	unsigned char ip3;///<Terzo byte dell'indirizzo ip
	unsigned char ip4;///<Quarto byte dell'indirizzo ip
	char type;///<Tipo di indirizzo (source o target)
	void *top;///<Puntatore alla testa della lista
	struct iIp *down;///<Puntatore alla lista di alert afferenti all'ip corrente
	struct iIp *prev;///<Puntatore al nodo precedente nella lista di ip
	} iIp;
/**\struct IndexIp IP_datastruct.h
 * \brief Indice degli indirizzi ip
 * 
 * Questa struttura è composta di due strutture iIp, una per l'ip sorgente e una per il destinatario.
 */
typedef struct IndexIp {												// Index element
	iIp *sourceItem;///<Puntatore alla lista di alert che contengono l'ip come indirizzo di Source
	iIp *targetItem;///<Puntatore alla lista di alert che contengono l'ip come indirizzo di Target
	} IndexIp;

IndexIp indexIp[256];///<Vettore, indice degli indirizzi ip

typedef struct indexIpList{
	iIp *item;
	struct indexIpList *next;
}indexIpList;
#endif
